package com.hj545.maven.plugin;

import com.hj545.pl.bean.ConfVO;
import com.hj545.pl.service.BizService;
import com.hj545.pl.service.impl.DBServiceImpl;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;

import java.util.Objects;

/**
 * <PRE>
 *  加载配置文件
 * </PRE>
 */
@Mojo(name = "loading")
public class LoadingMojo extends org.apache.maven.plugin.AbstractMojo {

	private final static String TYPE_DEF = "db";

	/**
	 * 环境名
	 */
	@Parameter(defaultValue = "dev", required = true)
	private String evnName;

	/**
	 * 项目名
	 */
	@Parameter(required = true)
	private String projectName;

	/**
	 * 导出文件路径
	 */
	@Parameter(required = true)
	private String filePath;

	/**
	 * 处理类型：db 数据库导出配置/file 文件中导出配置
	 */
	@Parameter(defaultValue = TYPE_DEF, required = true)
	private String type;

	/**
	 * db类型：数据库id
	 */
	@Parameter
	private String ip;

	/**
	 * db类型：数据库端口
	 */
	@Parameter
	private String port;

	/**
	 * db类型：数据库用户名
	 */
	@Parameter
	private String username;

	/**
	 * db类型：数据库密码
	 */
	@Parameter
	private String password;

	/**
	 * db类型：数据库名
	 */
	@Parameter
	private String dbname;

	/**
	 * file类型： 配置文件目录
	 */
	@Parameter(defaultValue = "./configuration")
	private String confFilePath;

	/**
	 * db类型：是否备份 如果备份，则把数据库配置导出成文件，放入到配置文件目录中
	 */
	@Parameter( defaultValue = "false")
	private Boolean fileBackUp;
	

	@Override
	public void execute() throws MojoExecutionException, MojoFailureException {

		getLog().info("start ***************************");

		String className;
		if (Objects.equals(type, TYPE_DEF)) {
			className = "DBServiceImpl";
		} else {
			className = "FileServiceImpl";
		}

		ConfVO conf = new ConfVO(ip, port, dbname, username, password, projectName,
				evnName, filePath, className);

		getLog().info(conf.toString());

		try {
			BizService biz = new DBServiceImpl(conf);
			biz.execute();

			if (fileBackUp) {
				biz.backupDBData();
			}

		} catch (Exception e) {
			getLog().error(e);
		}

		getLog().info("end ***************************");

	}
	

}
